﻿
package com.example.videooncarmera;

import sc.tool.audio.AudioTool;
import sc.tool.audio.AudioTool.AudioPlayer;
import sc.tool.audio.AudioTool.CallBack_bytes;
import sc.tool.video.CameraSurfaceView;
import sc.tool.video.CameraSurfaceView.CallBack_Bitmap;
import sc.tools.TransCodeTool;
import sci.tool.ActivityComponent;
import sci.tool.SocketCallBack;
import sci.tool.SocketClient;
import sci.tool.ThreadTool;
import sci.tool.ThreadTool.ThreadPram;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Toast;


/** Android Socket 演示demo主界面 */
public class MainActivity2 extends ActivityComponent
{
	
	private void getScreenSize(Context context)
	{
		DisplayMetrics metrics = context.getResources().getDisplayMetrics();
		
		String msg = "屏幕分辨率" + metrics.widthPixels + " x " + metrics.heightPixels;
		Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
	}
	
	SocketClient msgClient = null;		// 用于聊天信息、命令传输
	
//	SocketClient vedioClient = null;	// 用于视屏信息传输
//	SocketClient audioClient = null;	// 用于音频信息传输
	
	AudioPlayer audioPlayer;	// 音频播放器
	
	/** 设置界面显示 */
	@Override
	public void Init(Bundle savedInstanceState)
	{
		this.setContentView("activity_main");
		
		getScreenSize(this);
		
		CameraSurfaceView surView = new CameraSurfaceView(this, new CallBack_Bitmap()
		{
			@Override
			public void F(Bitmap pic)
			{
				ImageView("imageView_pre").setImageBitmap(pic);
				
//				// 这里将实时预览的帧率图像发送至服务器端
//				if(vedioClient != null && vedioClient.isConnected())
//				{
//					String data = TransCodeTool.ToString(pic);	// 将图片转化为字符串
//					vedioClient.Send(data);
//				}
			}
		});
		RelativeLayout("surfaceviewlayout").addView(surView);
		
//		// “按住说话”按钮
//		Button("button_Record").setOnTouchListener(new OnTouchListener()
//		{
//			final CallBack_bytes call = new CallBack_bytes()
//			{
//				
//				@Override
//				public void F(byte[] data)
//				{
////					audioPlayer.Play(data);	// 对实时获取的音频，进行实时播放
//					
//					// 1、一般是将data实时传输至服务器端，由服务器转发至远程客户端；
//					// 2、在远程客户端，用audioPlayer播放实时音频。
//					
//					// 这里将实时音频发送至服务器端
//					if(audioClient != null && audioClient.isConnected())
//					{
//						String str = TransCodeTool.ToString(data);	// 将图片转化为字符串
//						audioClient.Send(str);
//					}
//				}
//			};
//			
//			@Override
//			public boolean onTouch(View arg0, MotionEvent event)
//			{
//				if (event.getAction() == MotionEvent.ACTION_UP)
//				{
//					AudioTool.RecodingStop();			// 停止音频录制
//				}
//				
//				if (event.getAction() == MotionEvent.ACTION_DOWN)	
//				{
//					AudioTool.RecordingStart(call);		// 启动音频实时录制
//				}
//				
//				return false;
//			}
//		});
		
		audioPlayer = new AudioPlayer();	// 创建AudioPlayer用于音频播放，此处仅演示本地播放
	}
	
	
	
	/** 按钮点击响应逻辑 */
	@Override
	public void Click(String viewId)
	{
		if (viewId.equals("btn_connect"))
		{
			if (msgClient == null)
			{
				String ipString = EditText("editIp").getText().toString();					// 服务器端ip地址如： 10.80.8.201
				int port = Integer.parseInt(EditText("editPort").getText().toString());		// 服务器端的监听端口如： 37280
				
				if(msgClient == null)
				{
					SocketCallBack print = new SocketCallBack()
					{
						@Override
						public void Print(String info)
						{
							showMsg(info);
						}
					};
					
					msgClient = new SocketClient(print, ipString, port);	// 创建客户端Socket操作对象
				}
				
//				if(vedioClient == null)
//				{
//					SocketCallBack printVedio = new SocketCallBack()
//					{
//						@Override
//						public void Print(String info)
//						{
//							showVedio(info);
//						}
//					};
//					vedioClient = new SocketClient(printVedio, ipString, port, "vedioGroup");	// 视屏组socket
//				}
//				
//				if(audioClient == null)
//				{
//					SocketCallBack printAduio = new SocketCallBack()
//					{
//						@Override
//						public void Print(String info)
//						{
//							showAudio(info);
//						}
//					};
//					audioClient = new SocketClient(printAduio, ipString, port, "audioGroup");	// 音频组socket
//				}
			}
			
			int delay = 0;
			if (msgClient != null && !msgClient.isConnected()) msgClient.start(delay++ * 2000);						// 连接服务器
//			if (vedioClient != null && !vedioClient.isConnected()) vedioClient.start(delay++ * 2000);
//			if (audioClient != null && !audioClient.isConnected()) audioClient.start(delay++ * 2000);
			
			ThreadTool.RunInMainThread(new ThreadPram()
			{
				@Override
				public void Function()
				{
					String msg = "msgClient" + (msgClient.isConnected() ? "已连接" : "未连接");
//					msg += "\r\n" + "vedioClient" + (vedioClient.isConnected() ? "已连接" : "未连接");
//					msg += "\r\n" + "audioClient" + (audioClient.isConnected() ? "已连接" : "未连接");
					
					if(msgClient.isConnected() /*&& vedioClient.isConnected() && audioClient.isConnected() */) 
					{
						LinearLayout("ltsdk_topliner").setVisibility(View.INVISIBLE);
					}
					
					Toast.makeText(MainActivity2.this, msg, Toast.LENGTH_SHORT).show();
				}
			}, delay++ * 2000);
		}
		else if (viewId.equals("btn_close"))
		{
			msgClient.disconnect();									// 断开连接
//			vedioClient.disconnect();	
//			audioClient.disconnect();	
		}
		else if (viewId.equals("btn_send"))
		{
			String data = EditText("editMsg").getText().toString();
			msgClient.Send(data);										// 发送信息
		}
	}
	
	/** 在信息显示区显示信息 */
	private void showMsg(final String msg)
	{
		ThreadTool.RunInMainThread(new ThreadPram()
		{
			@Override
			public void Function()
			{
				String content = TextView("textMSG").getText().toString();
				TextView("textMSG").setText(msg + "\r\n" + content);
				
				// ScrollView("msg_scroll").fullScroll(ScrollView.FOCUS_DOWN);
			}
		});
	}
	
	/** 获取服务器端返回的视屏信息，并展示 */
	private void showVedio(String strData)
	{
		final Bitmap pic = TransCodeTool.ToBitmap(strData);		// 将字符串转化为图片
		if(pic == null) return;
		
		ThreadTool.RunInMainThread(new ThreadPram()
		{
			@Override
			public void Function()
			{
				ImageView("imageView_pre").setImageBitmap(pic);
			}
		});
	}
	
	/** 获取服务器端返回的音频信息并播放 */
	private void showAudio(String strData)
	{
		final byte[] data = TransCodeTool.ToBytes(strData);		// 将字符串转化为字节数组
		if(audioPlayer != null) audioPlayer.Play(data);		// 对实时获取的音频，进行实时播放
		
//		ThreadTool.RunInMainThread(new ThreadPram()
//		{
//			@Override
//			public void Function()
//			{
//				
//			}
//		});
	}
}
